Generator এবং Discriminator মডেল তৈরি

Generative Adversarial Networks (GANs) - মাইক্রোসফট কগনিটিভ টুলকিট (Microsoft Cognitive Toolkit) - Machine Learning

235

Generative Adversarial Networks (GANs) এর মধ্যে দুটি প্রধান উপাদান থাকে: Generator এবং DiscriminatorGenerator একটি মডেল তৈরি করে যা নতুন ডেটা পয়েন্ট (যেমন ছবি) তৈরি করার চেষ্টা করে, এবং Discriminator অন্য একটি মডেল যা তৈরি করা ডেটা এবং আসল ডেটার মধ্যে পার্থক্য চিহ্নিত করতে চেষ্টা করে।

এখানে আমি Keras এবং TensorFlow ব্যবহার করে Generator এবং Discriminator মডেল তৈরি করার একটি উদাহরণ প্রদান করব। এটি একটি সাদামাটা GAN মডেল হবে যেখানে Generator একটি নতুন ছবি তৈরি করবে এবং Discriminator এই ছবি চিহ্নিত করবে যে এটি আসল না বানানো।

GAN এর জন্য Generator এবং Discriminator মডেল তৈরি

১. Generator মডেল তৈরি

Generator মডেলটি সাধারণত random noise (জন্মের জন্য সৃষ্ট কোনো এলোমেলো ডেটা) ইনপুট হিসেবে নেয় এবং সেটি একটি ডেটা (যেমন একটি ইমেজ) আউটপুট করে।

from tensorflow.keras import layers, models

# Generator মডেল তৈরি
def build_generator(latent_dim):
    model = models.Sequential()
    
    # Fully connected লেয়ার (dense)
    model.add(layers.Dense(128, activation='relu', input_dim=latent_dim))
    model.add(layers.Dense(256, activation='relu'))
    model.add(layers.Dense(512, activation='relu'))
    model.add(layers.Dense(1024, activation='relu'))
    
    # আউটপুট লেয়ার (লম্বা vector হিসেবে আউটপুট)
    model.add(layers.Dense(28 * 28 * 1, activation='sigmoid'))
    
    # আউটপুট আকার পরিবর্তন (28x28x1 ইমেজ)
    model.add(layers.Reshape((28, 28, 1))) 
    
    return model

latent_dim = 100  # Latent space (random noise)
generator = build_generator(latent_dim)
generator.summary()
  • এখানে latent_dim হলো noise vector বা ইনপুট যা জেনারেটর মডেলে পাস করা হবে।
  • Dense লেয়ারগুলো ইনপুট সাইজ থেকে আউটপুট সাইজে রূপান্তর করে এবং sigmoid অ্যাকটিভেশন ফাংশন আউটপুটকে [0, 1] রেঞ্জে সীমাবদ্ধ করে।

২. Discriminator মডেল তৈরি

Discriminator মডেলটি একটি ক্লাসিফায়ার হিসেবে কাজ করে যা নির্ধারণ করে যে ইনপুটটি আসল নাকি জেনারেটেড। এটি ইনপুট ইমেজ থেকে বৈশিষ্ট্যগুলি শিখে এবং সেই অনুযায়ী সিদ্ধান্ত নেয়।

def build_discriminator(img_shape):
    model = models.Sequential()

    # ইমেজের প্রতি পিক্সেলকে ফ্ল্যাট করা
    model.add(layers.Flatten(input_shape=img_shape))
    model.add(layers.Dense(1024, activation='relu'))
    model.add(layers.Dense(512, activation='relu'))
    model.add(layers.Dense(256, activation='relu'))
    
    # আউটপুট লেয়ার (Binary classification)
    model.add(layers.Dense(1, activation='sigmoid'))
    
    return model

img_shape = (28, 28, 1)  # আউটপুট ইমেজের আকার
discriminator = build_discriminator(img_shape)
discriminator.summary()
  • Flatten লেয়ারটি ইমেজের প্রতিটি পিক্সেলকে একক ভেক্টরে রূপান্তর করে।
  • Dense লেয়ারগুলি ইনপুট ডেটার বৈশিষ্ট্যগুলি শিখতে এবং sigmoid ফাংশন দিয়ে আউটপুট ক্লাসিফিকেশন (0 অথবা 1) প্রদান করে।

৩. GAN মডেল তৈরি (Generator এবং Discriminator একসাথে)

এখন Generator এবং Discriminator দুটি মডেলকে একত্রিত করে GAN মডেল তৈরি করা হয়, যেখানে Discriminator আসল এবং জেনারেটেড ছবির মধ্যে পার্থক্য চিহ্নিত করে এবং Generator এটি ফিডব্যাক পায়, যাতে আরও বাস্তবসম্মত ছবি তৈরি করতে পারে।

def build_gan(generator, discriminator):
    # Discriminator এর ডিসক্রিমিনেটর অংশটি freeze করা (এটি পরিবর্তন করা হবে না)
    discriminator.trainable = False
    
    # Generator এর আউটপুট discriminator-এ পাঠানো হবে
    model = models.Sequential()
    model.add(generator)
    model.add(discriminator)
    
    return model

# GAN তৈরি করা
gan = build_gan(generator, discriminator)
gan.summary()
  • Discriminator এখানে freeze করা হয়, অর্থাৎ GAN মডেল প্রশিক্ষণের সময় এটি পরিবর্তন হবে না। শুধুমাত্র Generator প্রশিক্ষিত হবে।

৪. মডেল কম্পাইল করা

GAN প্রশিক্ষণের জন্য দুইটি আলাদা লস ফাংশন এবং অপ্টিমাইজার দরকার:

  • Discriminator এর জন্য binary crossentropy loss
  • Generator এর জন্য discriminator এর ফলাফলকে অপটিমাইজ করার জন্য "loss" ফাংশন।
# Discriminator কম্পাইল
discriminator.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Generator কম্পাইল (লস ফাংশন 'binary_crossentropy' ব্যবহার)
gan.compile(optimizer='adam', loss='binary_crossentropy')

৫. GAN মডেল ট্রেনিং

GAN মডেলটি প্রশিক্ষণ করার জন্য প্রতিটি epoch-এ Generator এবং Discriminator এর লস এবং কর্মক্ষমতা আপডেট করা হয়। Discriminator প্রথমে বাস্তব এবং জেনারেটেড ইমেজের মধ্যে পার্থক্য শিখবে, এবং তারপরে Generator থেকে উত্পন্ন ছবি বাস্তব হতে শিখতে থাকবে।

import numpy as np

# ফেইক এবং আসল ছবি তৈরি করার জন্য ফাংশন
def train_gan(epochs, batch_size=128):
    # MNIST ডেটাসেট লোড
    (X_train, _), (_, _) = keras.datasets.mnist.load_data()
    X_train = (X_train.astype(np.float32) - 127.5) / 127.5  # normalize images to [-1, 1]
    X_train = np.expand_dims(X_train, axis=3)  # reshape images to (28, 28, 1)

    for epoch in range(epochs):
        # Random ফেইক ইমেজ তৈরি করা
        noise = np.random.normal(0, 1, (batch_size, latent_dim))
        generated_images = generator.predict(noise)
        
        # আসল ডেটার স্যাম্পল
        real_images = X_train[np.random.randint(0, X_train.shape[0], batch_size)]

        # Discriminator প্রশিক্ষণ: আসল এবং ফেইক ছবি চিহ্নিত করা
        d_loss_real = discriminator.train_on_batch(real_images, np.ones((batch_size, 1)))
        d_loss_fake = discriminator.train_on_batch(generated_images, np.zeros((batch_size, 1)))
        
        # Discriminator লস
        d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)
        
        # Generator প্রশিক্ষণ: ফেইক ছবি রিয়াল হিসেবে চিহ্নিত করার জন্য
        noise = np.random.normal(0, 1, (batch_size, latent_dim))
        g_loss = gan.train_on_batch(noise, np.ones((batch_size, 1)))
        
        # প্রিন্ট করা
        if epoch % 100 == 0:
            print(f"{epoch} [D loss: {d_loss[0]} | D accuracy: {100*d_loss[1]}] [G loss: {g_loss}]")

৬. প্রশিক্ষণ শুরু করা

train_gan(epochs=10000, batch_size=64)

সারাংশ

Generator এবং Discriminator মডেলগুলি GAN এর দুটি প্রধান অংশ, যা একে অপরের বিরুদ্ধে কাজ করে। Generator নতুন ডেটা তৈরি করে এবং Discriminator সেটি আসল কিনা যাচাই করে। এই দুটি মডেল একসাথে ট্রেনিং করলে Generator আরও বাস্তবসম্মত ডেটা তৈরি করতে সক্ষম হয় এবং Discriminator আরও ভালোভাবে ফেইক এবং আসল ডেটার মধ্যে পার্থক্য শিখে। GANs এর মাধ্যমে আপনি নতুন ইমেজ, অডিও, ভিডিও এবং অন্যান্য সৃজনশীল ডেটা তৈরি করতে সক্ষম হন।

Content added By
Promotion

Are you sure to start over?

Loading...